
package cn.tang.tframe.dynconfig;

import cn.tang.tframe.common.utils.io.PropertiesUtil;
import cn.tang.tframe.dynconfig.parser.BigDecimalConfigValueParser;
import cn.tang.tframe.dynconfig.parser.BooleanConfigValueParser;
import cn.tang.tframe.dynconfig.parser.ByteConfigValueParser;
import cn.tang.tframe.dynconfig.parser.ConfigValueParser;
import cn.tang.tframe.dynconfig.parser.DoubleConfigValueParser;
import cn.tang.tframe.dynconfig.parser.FloatConfigValueParser;
import cn.tang.tframe.dynconfig.parser.IntConfigValueParser;
import cn.tang.tframe.dynconfig.parser.LongConfigValueParser;
import cn.tang.tframe.dynconfig.parser.StringConfigValueParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.math.BigDecimal;
import java.util.Properties;

/**
 * Created by tanghc
 */
public class CommonDynConfig {

	public static final Logger logger =
		LoggerFactory.getLogger(CommonDynConfig.class);
	public static final String config_group = "common";
	public static final String config_data_id = "dynconfig";
	private static Properties properties = null;

	private CommonDynConfig() {
	}

	static {
		DynConfigRegister.getInstance().buildOnce(
			config_group, config_data_id, new IDynConfigProcessor() {

				@Override
				public void procesConfig(String config) {

					properties = PropertiesUtil.loadFromString(config);
				}
			});
	}
	public static int getIntValue(String key){
		return getIntValue(key,null);
	}
	public static int getIntValue(String key,Integer defaultValue){
		ConfigValueParser<Integer> configValueParser = new IntConfigValueParser();
		return configValueParser.parse(properties,key,defaultValue);
	}
	public static long getLongValue(String key){
		return getLongValue(key, null);
	}
	public static long getLongValue(String key,Long defaultValue){
		ConfigValueParser<Long> configValueParser = new LongConfigValueParser();
		return configValueParser.parse(properties,key,defaultValue);
	}
	public static float getFloatValue(String key){
		return getFloatValue(key, null);
	}
	public static float getFloatValue(String key,Float defaultValue){
		ConfigValueParser<Float> configValueParser = new FloatConfigValueParser();
		return configValueParser.parse(properties,key,defaultValue);
	}
	public static double getDoubleValue(String key){
		return getDoubleValue(key, null);
	}
	public static double getDoubleValue(String key,Double defaultValue){
		ConfigValueParser<Double> configValueParser = new DoubleConfigValueParser();
		return configValueParser.parse(properties,key,defaultValue);
	}
	public static boolean getBooleanValue(String key){
		return getBooleanValue(key, null);
	}
	public static boolean getBooleanValue(String key,Boolean defaultValue){
		ConfigValueParser<Boolean> configValueParser = new BooleanConfigValueParser();
		return configValueParser.parse(properties,key,defaultValue);
	}
	public static byte getByteValue(String key){
		return getByteValue(key, null);
	}
	public static byte getByteValue(String key,Byte defaultValue){
		ConfigValueParser<Byte> configValueParser = new ByteConfigValueParser();
		return configValueParser.parse(properties,key,defaultValue);
	}
	public static BigDecimal getBigDecimalValue(String key){
		return getBigDecimalValue(key, null);
	}
	public static BigDecimal getBigDecimalValue(String key,BigDecimal defaultValue){
		ConfigValueParser<BigDecimal> configValueParser = new BigDecimalConfigValueParser();
		return configValueParser.parse(properties,key,defaultValue);
	}
	public static String getValue(String key){
		return getValue(key,null);
	}
	public static String getValue(String key,String defaultValue){
		ConfigValueParser<String> configValueParser = new StringConfigValueParser();
		return  configValueParser.parse(properties,key,defaultValue);

	}
}
